package com.hollycrm.hollysqm.util.ftp;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.hollycrm.hollysqm.bean.FtpConfigurBean;
//import com.hollycrm.hollysqm.util.PropertiesUtil;
import com.hollycrm.hollysqm.util.PropertiesUtil;

public class FTPManager {

	private final Logger log = LoggerFactory.getLogger(getClass());
	private static Map<String,Boolean> useMap = new HashMap<String,Boolean>();
	
	/**
	 * 判断FTP连接是否还有线程使用【暂未使用】
	 * @return
	 */
	public boolean isUseConn(){
		if (useMap.size()<=0){
			return false;
		}		
		return true;
	}
	
	/**
	 * 线程使用完毕，将当前FTP连接状态置空【暂未使用】
	 * @param threadName
	 */
	public synchronized static void closeUseConn(String threadName){
		useMap.remove(threadName);	
	}
	
	/**
	 * 启动一个线程时，加入线程名到FTP连接中，表示当前线程使用FTP连接对象【暂未使用】
	 * @param threadName
	 */
	public synchronized static void addUseConn(String threadName){
		useMap.put(threadName, true);
	}
	
	/**
	 * 获取所有Ftp连接信息
	 * @return
	 */
//	public Map<String,FTPServerInterface> getFtpConnObjMap(){
//		Map<String,FTPServerInterface> ftpMap = new HashMap<String,FTPServerInterface>();
//		String value = PropertiesUtil.getProperty("ftp.count");
//		int count = value !=null?Integer.parseInt(value):0;
////		String [] ftps = null;
//		//共6个FTP服务，根据1,2,3...来区分
//		for (int i=1;i<=count;i++){
//			FTPServerInterface ftp = this.getFtpConn(i);
////			ftps = getFtpConnInfo(i);
////			FTPFileUtil ftp=new FTPFileUtil(ftps[0],Integer.parseInt(ftps[1]),ftps[2],ftps[3]);
//			ftpMap.put(String.valueOf(i), ftp);
//		}			
//		return ftpMap;
//	}
	
	/**
	 * 获取Ftp连接信息
	 * @return
	 */
//	public String[] getFtpConnInfo(int index){
//		String host = PropertiesUtil.getProperty("FTPAddress"+index);
//		String port = PropertiesUtil.getProperty("FTpPort"+index);
//		String userName = PropertiesUtil.getProperty("FTPUser"+index);
//		String password = PropertiesUtil.getProperty("FTPPwd"+index);
//		String ftpType = PropertiesUtil.getProperty("FTPType"+index);
//		return new String[]{host,port,userName,password,ftpType};
//	}
	
	/**
	 * 获取Ftp连接信息
	 * @return
	 */
	public FTPServerInterface getFtpConn(int index,List<FtpConfigurBean> ftpConfigurList){
		for (FtpConfigurBean ftpConfigurBean : ftpConfigurList){
			if (index == ftpConfigurBean.getIndex()){//获取指定索引服务器数据
				return this.getFtpConn(ftpConfigurBean);
			}
		}
		log.error("没有找到FTP：ftp.vocserver"+index+"配置参数无法创建FTP连接，请检查application.properties文件配置是否正确...");
		return null;
	}
	
	/**
	 * 获取Ftp连接信息
	 * @return
	 */
	public FTPServerInterface getFtpConn(FtpConfigurBean ftpConfigurBean){
		//区分是FTP还是SFTP下载
		if ("sftp".equals(ftpConfigurBean.getType())){
			return new SFTPFileUtil(ftpConfigurBean.getHost(),
					ftpConfigurBean.getPort(),
					ftpConfigurBean.getUserName(),
					ftpConfigurBean.getPassword());
		}
		return new FTPFileUtil(ftpConfigurBean.getHost(),
				ftpConfigurBean.getPort(),
				ftpConfigurBean.getUserName(),
				ftpConfigurBean.getPassword());
	}
	
	/**
	 * 退出定时任务时对FTP进行关闭
	 */
	public void closeAll(Map<String,FTPServerInterface> ftpMap){
		for (Entry<String,FTPServerInterface> entry : ftpMap.entrySet()){
			try{
				entry.getValue().close();
			}catch(IOException ioe){
				log.error("连接到FTP："+PropertiesUtil.getProperty("FTPAddress"+entry.getKey())+"的客户端关闭异常.."+ioe.getMessage());
				ioe.printStackTrace();
			}
		}
		ftpMap.clear();
	}
}
